package com.kob.backend.service.impl.user.bot;

import com.kob.backend.mapper.BotMapper;
import com.kob.backend.pojo.Bot;
import com.kob.backend.pojo.User;
import com.kob.backend.service.impl.utils.UserDetailsImpl;
import com.kob.backend.service.user.bot.UpdateService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

@Service
public class UpdateServiceImpl implements UpdateService {
    @Autowired
    private BotMapper botMapper;

    @Override
    public Map<String, String> update(Map<String, String> data) {
        UsernamePasswordAuthenticationToken authenticationToken =
                (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication();
        UserDetailsImpl loginUser = (UserDetailsImpl) authenticationToken.getPrincipal();
        User user = loginUser.getUser();

        int bot_id = Integer.parseInt(data.get("bot_id"));

        String title = data.get("title");
        String description = data.get("description");
        String content = data.get("content");

        Map<String,String> map = new HashMap<>();

        if(title == null || title.length() == 0){
            map.put("error_message","标题不能为空");
            return map;
        }

        if(title.length() > 99){
            map.put("error_message","标题长度不能大于99");
            return map;
        }
        if(description == null||description.length() == 0){
            description = "这个用户很懒，什么也没有留下(希望他明天还能记得他代码里写的啥)";
        }

        if(description.length() > 299){
            map.put("error_message","描述字数太多");
            return map;
        }
        if(content == null || content.length() == 0)
        {
            map.put("error_message","代码不能为空(你指望上天给你写代码？)");
            return map;
        }
        if(content.length()>9999){
            map.put("error_message","代码长度过长(我这整个项目代码都不一定有你长，你想上天?)");
            return map;
        }

        Bot bot = botMapper.selectById(bot_id);

        if(bot == null){
            map.put("error_message","bot不存在");
            return map;
        }
        if(!bot.getUserId().equals(user.getId())){
            map.put("error_message","没有权限");
            return map;
        }

        Bot new_bot = new Bot(
                null,
                user.getId(),
                title,
                description,
                content,
                bot.getRating(),
                bot.getCreateTime(),
                new Date()
        );
        botMapper.deleteById(bot.getId());//这里用删除加创建的形式来update主要是因为bot的代码一个id只会编译一次，不改id就会无效。
        botMapper.insert(new_bot);
        map.put("error_message","success");


        return map;
    }
}
